/**
 ****************************************************************************************************
 * @file        key.c
 * @author      LXP
 * @version     V1.0
 * @date        2024-08-08
 * @brief       key代码
 *
 ****************************************************************************************************
 */

#include "key.h"
#include "../LED/led.h"







volatile boolean keyState = False;
/**
 * @brief       中断服务程序中需要做的事情
                在HAL库中所有的外部中断服务函数都会调用此函数
 * @param       GPIO_Pin:中断引脚号
 * @retval      无
 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	keyState = True;
}


//清除中断里被按下过的标记
void KEY_clearFlag()
{
	keyState = False;
}
//获取按键中断里置的标记，按键是否曾经被按下过
boolean KEY_keyDownFlag()
{
	if(keyState == True)
	{
		keyState = False;
		return True;
	}
	return False;
}
boolean KEY_keyDown()
{
	//超时设置100毫秒
	uint16_t timeOut=100;
	if(HAL_GPIO_ReadPin(KEY_WAKEUP_GPIO_Port, KEY_WAKEUP_Pin) == GPIO_PIN_SET)
	{
		//按键按下时消抖20毫秒
		HAL_Delay(20);
		//如果按键持续按下，在此循环等待按键松开
		while(HAL_GPIO_ReadPin(KEY_WAKEUP_GPIO_Port, KEY_WAKEUP_Pin) == GPIO_PIN_SET)
		{
			timeOut--;
			if(timeOut == 0)
			{
				break;
			}
			HAL_Delay(1);
		}
		//按键松开后消抖20毫秒
		HAL_Delay(20);
		return True;
	}
	return False;
}







